package com.bxji.spring.eurekaclient;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;

/**
 * 采用注解方式 ，定制Rabbon客户端负载均衡策略 <br/>
 * 还有一种，基于配置文件的方式： <br/>
 * xx-provider: <br/>
 * --ribbon: <br/>
 * ----NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule <br/>
 * @author bxji
 *
 */
@Configuration
@ExcludeFromComponentScan // 如果不加排除扫描会使所有的接口的策略发生改变，不能单独指定特殊接口的负载均衡方式
public class ConsumerConfiguration {

    /**
     * @return ribbonRule 指定负载均衡的方式
     */
    @Bean
    public IRule ribbonRule() {
        return new RandomRule();
    }

    /**
     * @return RestTemplate是Spring提供的用于访问Rest服务的客户端，RestTemplate提供了多种便捷访问远程Http服务的方法，能够大大提高客户端的编写效率
     */
    @Bean
    @LoadBalanced  // 使用ribbon做负载均衡 
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
    
    
    
}
